home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 25 / CU Amiga Magazine's Super CD-ROM 25 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-08].iso / CUCD / Programming / GMS / GMSDev / Source / C / Blitter / Rosette.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-05-06  |  2.0 KB  |  75 lines

  1. /* Name:  Rosette (Converted from Amiga Graphics Inside and Out)
  2. ** SAS/C: sc Rosette.c opt math=standard INCDIR=INCLUDES:
  3. */
  4.  
  5. #include <proto/dpkernel.h>
  6. #include <math.h>
  7.  
  8. BYTE *ProgName      = "Rosette";
  9. BYTE *ProgAuthor    = "Paul Manias";
  10. BYTE *ProgDate      = "January 1998";
  11. BYTE *ProgCopyright = "DreamWorld Productions (c) 1996-1998.  Freely distributable.";
  12. BYTE *ProgShort     = "Draws various rosette pattenrs.";
  13.  
  14. struct GScreen *screen;
  15. struct JoyData *joydata;
  16.  
  17. void Rosette(void);
  18.  
  19. LONG palette[] = {
  20.   PALETTE_ARRAY,32,
  21.   0x000000L,0x101010L,0x171717L,0x202020L,0x272727L,0x303030L,0x373737L,0x404040L,
  22.   0x474747L,0x505050L,0x575757L,0x606060L,0x676767L,0x707070L,0x777777L,0x808080L,
  23.   0x878787L,0x909090L,0x979797L,0xa0a0a0L,0xa7a7a7L,0xb0b0b0L,0xb7b7b7L,0xc0c0c0L,
  24.   0xc7c7c7L,0xd0d0d0L,0xd7d7d7L,0xe0e0e0L,0xe0e0e0L,0xf0f0f0L,0xf7f7f7L,0xffffffL
  25. };
  26.  
  27. /***********************************************************************************/
  28.  
  29. void main(void)
  30. {
  31.   if (screen = InitTags(NULL,
  32.      TAGS_SCREEN,    NULL,
  33.        GSA_BitmapTags, NULL,
  34.        BMA_Palette,    palette,
  35.        TAGEND,         NULL,
  36.      TAGEND)) {
  37.  
  38.      Display(screen);
  39.  
  40.      if (joydata = Init(Get(ID_JOYDATA),NULL)) {
  41.  
  42.         Rosette();
  43.  
  44.      Free(joydata);
  45.      }
  46.   Free(screen);
  47.   }
  48. }
  49.  
  50. /***********************************************************************************/
  51.  
  52. void Rosette(void)
  53. {
  54.   WORD offsetx = (screen->Width/2);
  55.   WORD offsety = (screen->Height/2);
  56.   double t, angle, x, y;
  57.   double inside  = 3.0, radius = 100.0,
  58.          outside = 3.0, f      = 0.5,
  59.          edges   = 10;
  60.  
  61.   for (t = -inside/10; t < (outside/10); t += 0.1) {
  62.     Query(joydata);
  63.     if (joydata->Buttons & JD_LMB) {
  64.        return;
  65.     }
  66.  
  67.     for (angle = 0; angle < (2*PI); angle += 0.01) {
  68.       x = radius * cos(angle) + t * radius * cos(angle * edges);
  69.       y = radius * sin(angle) + t * radius * sin(angle * edges);
  70.       DrawPixel(screen->Bitmap, (WORD)(x+offsetx), (WORD)(y*f+offsety), FastRandom(screen->Bitmap->AmtColours));
  71.     }
  72.   }
  73. }
  74.  
  75.